package it.fantacalcio.struts.action.amministrazione.partita;

import it.fantacalcio.model.Partita;
import it.fantacalcio.model.Role;
import it.fantacalcio.model.Squadra;
import it.fantacalcio.model.User;
import it.fantacalcio.spring.service.MyServiceFactory;
import it.fantacalcio.struts.form.PartitaForm;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.beans.BeanUtils;

public class ConfermaCRUDPartitaAction extends DispatchAction {
	
	@Override
	protected ActionForward dispatchMethod(ActionMapping arg0, ActionForm arg1,
			HttpServletRequest arg2, HttpServletResponse arg3, String arg4)
			throws Exception {
		
		User userInSession = (User) arg2.getSession().getAttribute("userInSession");
		if(userInSession==null || userInSession.getAttivo().equals("NO") || !userInSession.getRole().getCodRole().equals("ADMIN")){
			return arg0.findForward("noninsession");
		}
		return super.dispatchMethod(arg0, arg1, arg2, arg3, arg4);
	}
	
	public ActionForward aggiungi(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		PartitaForm partitaForm = (PartitaForm) form;
		List<Partita> listaPartita = new ArrayList<Partita>();
		try {
			Partita partita = new Partita();
			BeanUtils.copyProperties(partitaForm, partita);
			partita.setSquadraInCasa(MyServiceFactory.getSquadraService().get(partitaForm.getIdSquadraInCasa()));
			partita.setSquadraFuoriCasa(MyServiceFactory.getSquadraService().get(partitaForm.getIdSquadraFuoriCasa()));
			int ris = MyServiceFactory.getPartitaService().salva(partita);
			if(ris < 1){
				List<Role> listaRole = MyServiceFactory.getRoleService().list();
				request.setAttribute("listaRole", listaRole);
				request.setAttribute("msg", "Partita non aggiunta");
				return mapping.findForward("aggiungi");
			}
			listaPartita = MyServiceFactory.getPartitaService().list();
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("listaPartita", listaPartita);
		request.setAttribute("msg", "Partita aggiunta con successo");
		return mapping.findForward("ok");
	}
	
	public ActionForward modifica(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		PartitaForm partitaForm = (PartitaForm) form;
		List<Partita> listaPartita = new ArrayList<Partita>();
		try {
			Partita partita = MyServiceFactory.getPartitaService().get(partitaForm.getId());
			BeanUtils.copyProperties(partitaForm, partita);
			partita.setSquadraInCasa(MyServiceFactory.getSquadraService().get(partitaForm.getIdSquadraInCasa()));
			partita.setSquadraFuoriCasa(MyServiceFactory.getSquadraService().get(partitaForm.getIdSquadraFuoriCasa()));
			int risp = MyServiceFactory.getPartitaService().modifica(partita);
			if(risp < 1){
				List<Squadra> listaSquadra = MyServiceFactory.getSquadraService().list();
				request.setAttribute("listaSquadra", listaSquadra);
				request.setAttribute("msg", "Partita non modificata");
				return mapping.findForward("modifica");
			}
			listaPartita = MyServiceFactory.getPartitaService().list();
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("listaPartita", listaPartita);
		request.setAttribute("msg", "Partita modificata con successo");
		return mapping.findForward("ok");
	}
	
	public ActionForward cancella(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		PartitaForm partitaForm = (PartitaForm) form;
		List<Partita> listaPartita = new ArrayList<Partita>();
		try {
			Partita partita = MyServiceFactory.getPartitaService().get(partitaForm.getId());
			int risp = MyServiceFactory.getPartitaService().cancella(partita);
			listaPartita = MyServiceFactory.getPartitaService().list();
			if(risp < 1){
				List<Squadra> listaSquadra = MyServiceFactory.getSquadraService().list();
				request.setAttribute("listaSquadra", listaSquadra);
				request.setAttribute("msg", "Partita non cancellata");
				return mapping.findForward("cancella");
			}
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("listaPartita", listaPartita);
		request.setAttribute("msg", "Partita cancellata con successo");
		return mapping.findForward("ok");
	}
	
}
